;Winston De Oleo
;Reloj de Ajedrez
;Proyecto Final Taller de Micro I
;19/12/2021

;**********************Espacio para declarar constantes**********************
A equ 41h
B equ 01000010b
C equ 01000011b
D equ 01000100b
E equ 01000101b
F equ 01000110b
G equ 01000111b
H equ 01001000b
I equ 01001001b
J equ 01001010b
K equ 01001011b
L equ 01001100b
M equ 01001101b
N equ 01001110b
O equ 01001111b

P equ 01010000b
Q equ 01010001b
R equ 01010010b
S equ 01010011b
T equ 01010100b
U equ 01010101b
V equ 01010110b
W equ 01010111b
X equ 01011000b
Y equ 01011001b
Z equ 01011010b

CERO equ 00110000b
UNO equ 00110001b
DOS equ 00110010b
TRES equ 00110011b
CUATRO equ 00110100b
CINCO equ 00110101b
SEIS equ 00110110b
SIETE equ 00110111b 
OCHO equ 0011 01000b
NUEVE equ 00111001b 

puntos equ 3Ah
punto equ 00101110b 
raya equ  00101101b
espacio equ 00010000b 
ht equ  00100011b 
full equ 11111111b 
pre equ  03fh 
der equ 07eh
izq equ 07fh
mas equ 02bh

INIT equ 38h ;Valor para INICIALIZAR LA LCD
on equ  0Dh  ;Valor para ENCENCER LA LCD
clean equ 1h ;Valor para LIMPIAR LA LCD 
HOME  equ 2h ;Valor para IR A LA POSICION INICIAL
cuadro equ 11011011b

pa EQU 0   ;Valor para seleccionar puerto A
pb equ 2   ;Valor para seleccionar puerto B
pc equ 4   ;Valor para seleccionar puerto C
  
sum equ 30h

;****FIN******************Espacio para declarar constantes**********************



org 100h
 

;limpieza de los registros
mov ax,0
mov bx,0
mov cx,0
mov dx,0 


;se configura la PPI
mov dx,6       ;0110
mov ax,8ah     ; Valor para configurar PPI, puerto A salida, puerto B entrada, CL salida, CH entrada
out dx,ax


;inicializacion LCD
    mov dx,pc       ;pulso
    mov aL,00000b
    out dx,ax

    mov dx,pa
    mov ax,init
    out dx,ax

    mov dx,pc       ;pulso
    mov aL,00001b
    out dx,ax 

    mov dx,pc     ;pulso
    mov aL,00000b
    out dx,ax


;ENCENDIDO LCD


mov dx,pa
mov ax,on
out dx,ax

mov dx,pc       ;pulso
mov aL,00001b
out dx,ax

mov dx,pc       ;pulso
mov aL,00000b
out dx,ax  



;***************************INICIO***********************************************
inicio:     ;Impresion inicial en la LCD


mov a1,espacio
mov a2,espacio
mov a3,R
mov a4,E
mov a5,L
mov a6,O
mov a7,J
mov a8,espacio
mov a9,D
mov a10,E
mov a11,espacio
mov a12,A
mov a13,J
mov a14,E
mov a15,D 
mov a16,R 
mov a17,E
mov a18,Z
mov a19,espacio 
mov a20,espacio

mov b1,espacio
mov b2,espacio
mov b3,espacio
mov b4,espacio
mov b5,espacio
mov b6,espacio
mov b7,E
mov b8,L
mov b9,C
mov b10,A
mov b11,espacio 
mov b12,W
mov b13,A
mov b14,D
mov b15,E
mov b16,espacio
mov b17,espacio
mov b18,espacio
mov b19,espacio
mov b20,espacio

CALL IMPRIME  ;Llamada a la funcion IMPRIME  
   
 
;******************** Tiempo de Espera  
     mov cx,0fffdh
    delay10:
    loop delay10  

    mov cx,0ffffh
    delay11:
    loop delay11 
;******************** 

;************FIN*******************INICIO***********************************************


;************INCIO****************ELIGE************************************************** 


ELIGE: ;Impresion para elegir modo


call clean ;Llamada a funcion Clean

mov a1,espacio
mov a2,espacio
mov a3,espacio
mov a4,espacio   
mov a5,espacio        
mov a6,UNO      
mov a7,raya       
mov a8,M        
mov a9,punto        
mov a10,S       
mov a11,U  
mov a12,B  
mov a13,I   
mov a14,T
mov a15,A 
mov a16,espacio 
mov a17,espacio
mov a18,espacio
mov a19,espacio 
mov a20,espacio

mov b1,espacio
mov b2,espacio
mov b3,DOS
mov b4,raya
mov b5,G
mov b6,O
mov b7,N
mov b8,G
mov b9,espacio
mov b10,espacio
mov b11,TRES 
mov b12,raya
mov b13,F
mov b14,I
mov b15,S
mov b16,H
mov b17,E
mov b18,R
mov b19,espacio
mov b20,espacio


    CALL IMPRIME ;Llamada a funcion IMPRIME
  
  
;*************FIN**************ELIGE****************************************************   
 
 
 
pb_elige:   ;   Lectura del puerto B para eleccion de modo
 
    mov dx,pb
    in ax,dx
    
;************************   
    cmp al,100000b      ;Valor para seteo de fisher
       je fisherS
    
    cmp al,1000000b
    je gong             ;Valor para seteo de gong
    
    cmp al,10000000b    ;Valor Para seteo de subita
    je subita  
;************************    
       
jmp pb_elige

 
;*********INCIO**************Etiquetas para cambio de valores en los modos********************     
fisherS:   ;Modo FIsher
    
    
    
mov a1,espacio
mov a2,espacio
mov a3,espacio
mov a4,espacio
mov a5,espacio
mov a6,M
mov a7,O
mov a8,D
mov a9,O
mov a10,espacio
mov a11,F
mov a12,I
mov a13,S
mov a14,H
mov a15,E 
mov a16,R  
mov a17,espacio
mov a18,espacio
mov a19,espacio 
mov a20,espacio
 
mov b1,punto
mov b2,punto
mov b3,punto
mov b4,punto
mov b5,punto
mov b6,punto
mov b7,punto
mov b8,punto
mov b9,punto
mov b10,punto
mov b11,punto 
mov b12,punto
mov b13,punto
mov b14,punto
mov b15,punto
mov b16,punto
mov b17,punto
mov b18,punto
mov b19,punto
mov b20,punto
    
call clean   ;Limpieza de LCD
call IMPRIME ;Impresión en LCD 
    
;******Seteo de Valores Iniciales en la LCD    
mov b4,30h
mov b11,30h
mov b12,30h
mov b19,30h
mov b20,30h
mov seg,0
mov min,0
mov hora,0 
mov fisher,1 
 
jmp seteo_fisher_subita ;Salto al seteo del tiempo

     
subita:  ;Modo Muerte Subita
       
mov a1,espacio
mov a2,espacio
mov a3,espacio
mov a4,espacio
mov a5,M
mov a6,U
mov a7,E
mov a8,R
mov a9,T
mov a10,E
mov a11,espacio
mov a12,S
mov a13,U
mov a14,B
mov a15,I 
mov a16,T
mov a17,A
mov a18,espacio
mov a19,espacio 
mov a20,espacio

mov b1,punto
mov b2,punto
mov b3,punto
mov b4,punto
mov b5,punto
mov b6,punto
mov b7,punto
mov b8,punto
mov b9,punto
mov b10,punto
mov b11,punto 
mov b12,punto
mov b13,punto
mov b14,punto
mov b15,punto
mov b16,punto
mov b17,punto
mov b18,punto
mov b19,punto
mov b20,punto

call clean   ;Limpieza de LCD
call IMPRIME  ;Impresion en LCD

;******Seteo de Valores Iniciales en la LCD    
mov b4,30h
mov b11,30h
mov b12,30h
mov b19,30h
mov b20,30h
mov seg,0
mov min,0
mov hora,0
mov incr,0
mov fisher,2

    
jmp seteo_fisher_subita  ;Salto al seteo


gong:  ;Modo Gong    

mov fisher,3
mov a1,espacio
mov a2,espacio
mov a3,espacio
mov a4,espacio
mov a5,espacio
mov a6,M
mov a7,O
mov a8,D
mov a9,O
mov a10,espacio
mov a11,G
mov a12,O
mov a13,N
mov a14,G
mov a15,espacio 
mov a16,espacio 
mov a17,espacio
mov a18,espacio
mov a19,espacio 
mov a20,espacio

mov b1,punto
mov b2,punto
mov b3,punto
mov b4,punto
mov b5,punto
mov b6,punto
mov b7,punto
mov b8,punto
mov b9,punto
mov b10,punto
mov b11,punto 
mov b12,punto
mov b13,punto
mov b14,punto
mov b15,punto
mov b16,punto 
mov b17,punto
mov b18,punto
mov b19,punto
mov b20,punto
 
call clean   ;Limpieza de LCD
call IMPRIME  ;Impresion en LCD
    
;******Seteo de Valores Iniciales en la LCD    
mov seg,0
mov min,0
mov hora,0    
mov b8,30h
mov b9,30h
mov b16,30h
mov b17,30h
mov fisher,3    
    
jmp seteo_gong ;salto al seteo

;**********FIN********************Etiquetas para cambio de valores en los modos**********


;*********INICIO*****************Seteo para Muerte Subita y Fisher*********************** 

seteo_fisher_subita: 


     
    mov dx,pb
    in ax,dx

;************************ Comparacion de Valores de entrada
  
    cmp al,10b     ;Valor para seteo de segundos
    je inc_seg
    
    cmp al,100b
    je inc_min       ;Valor para seteo de minutos
    
    cmp al,1000b         ;Valor Para seteo de Hora
    je inc_hora  
    
    cmp al,1b                ;Valor Para seteo de incr
    je inc_inc 
    
    cmp al,0e0h                  ;Valor Para Iniciar
    je inicio_fisher_subita
 
     
     
    cmp ax,10000b     ;Cancelar
    je ELIGE
    
jmp seteo_fisher_subita
;************************     
      

inc_seg:    ;Incremento de los segundos

    inc seg 
   
    cmp seg,60
    je borra_seg 
    
    j0:
     
    mov cl,seg
    
    call dato      ;Conversion de los datos a ascci HEX
 
    mov b20,cl
    mov b19,ch
    
call datofs    ;Preparacion de los datos para la salida
call IMPRIMEB ;Impresion de LCD,solo en la fila 2  
    
jmp seteo_fisher_subita
 
 
inc_min:  ;Incremento de los minutos
 
    inc min 
    
    cmp min,60
    je borra_min 
    
    j1:
    
    
    mov cl,min
    call dato      ;Conversion de los datos a ascci HEX
 
    mov b12,cl
    mov b11,ch
  
call datofs    ;Preparacion de los datos para la salida
call IMPRIMEB ;Impresion de LCD,solo en la fila 2
    
jmp seteo_fisher_subita
 
 
inc_hora:   ;Incremento de las hora
 
    inc hora 
    mov cl,hora 
    
    cmp hora,3
    je borra_h 
    
    j2:
 
    call dato    ;Conversion de los datos a ascci HEX
    mov b4,cl
    
call datofs    ;Preparacion de los datos para la salida
call IMPRIMEB ;Impresion de LCD,solo en la fila 2
    
jmp seteo_fisher_subita
 
 
 
inc_inc:  ;Seteo del Incremento -Solo Fisher   

    cmp fisher,1
    jne seteo_fisher_subita

    inc incr 
    mov cl,incr 
     
     
    cmp incr,16
    je borra_inc

    j3: 
    
 
call dato   ;Conversion de los datos a ascci HEX
     
    mov a18,cl
    mov a17,ch   
    
call clean  ;Limpieza LCD
    
mov a1,espacio
mov a2,espacio
mov a3,F
mov a4,I
mov a5,S
mov a6,H
mov a7,E
mov a8,R
mov a9,espacio
mov a10,espacio
mov a11,espacio
mov a12,espacio
mov a13,I
mov a14,N
mov a15,C 
mov a16,puntos  
;mov a17,
;mov a18,
mov a19,espacio 
mov a20,espacio
                
                
call datofs    ;Preparacion de los datos para la salida
call IMPRIME ;Impresion de LCD,solo en la fila 2

;call IMPRIMEB   
    

jmp seteo_fisher_subita  


;****Etiquetas para el reinicio de variables
borra_seg:
mov seg,0
jmp j0 
 
borra_min:
mov min,0
jmp j1

borra_h:
mov hora,0
jmp j1

borra_inc:
mov incr,0
jmp j3  

;*********FIN*******************Seteo para Muerte Subita y Fisher***********************  


;*********INICIO***********Seteo para Gong************************************************************************************** 
      
       
 seteo_gong: 
     
    mov dx,pb
    in ax,dx 
;************************   
    cmp al,10b        ;Valor para seteo de segundos
    je inc_segg
    
    cmp ax,100b
    je inc_ming       ;Valor para seteo de minutos
     
    cmp al,0e0h                  ;Valor Para Iniciar
    je inicio_fisher_subita
 
         
    cmp ax,10000b     ;Cancelar
    je ELIGE
    
   jmp seteo_gong
;************************     
   
    
      
inc_segg:   ;Incremento de los segundos

    inc seg 
   
    cmp seg,60
    je borra_seg 
    
    j4:
     
    mov cl,seg
    
    call dato
 
    mov b17,cl
    mov b16,ch
              
             
call datogo ;Preparacion de los datos para la salida
call IMPRIMEB ;Impresion de LCD,solo en la fila 2
    
jmp seteo_gong



inc_ming:  ;incremento minutos
 
    inc min 
    
    cmp min,60
    je borra_ming 
    
    j5:
    
    
    mov cl,min
call dato
 
    mov b9,cl
    mov b8,ch  

call datogo ;Preparacion de los datos para la salida
call IMPRIMEB ;Impresion de LCD,solo en la fila 2
   
jmp seteo_gong      
        
;Reinicio de  
borra_segg:
mov seg,0
jmp j4 
 
borra_ming:
mov min,0
jmp j5  

;*********FIN***********Seteo para Gong***********************************************

      
 
;********************************INCIO DE LOS CONTEOS********************************************************************
          
          
          
inicio_fisher_subita:

;*********************************** Comparacion para determinar si los seteos estan en cero
  mov ax,0
  add al,seg
  add al,min
  add al,hora
  cmp al,0
  je seteo_fisher_subita
;************************************  

mov a1,full
mov a2,full
mov a3,full
mov a4,full
mov a5,full
mov a6,full
mov a7,full
mov a8,full
mov a9,full
mov a10,full
mov a11,full
mov a12,full
mov a13,full
mov a14,full
mov a15,full 
mov a16,full  
mov a17,full
mov a18,full
mov a19,full 
mov a20,full

mov b1,full
mov b2,full
mov b3,full
mov b4,full
mov b5,full
mov b6,full
mov b7,full
mov b8,full
mov b9,full
mov b10,full
mov b11,full 
mov b12,full
mov b13,full
mov b14,full
mov b15,full
mov b16,full
mov b17,full
mov b18,full
mov b19,full
mov b20,full

call clean
call IMPRIME

;******************** Tiempo de Espera  
     mov cx,0500h
    delay15:
     loop delay15
;********************

mov a1,raya
mov a2,raya
mov a3,raya
mov a4,raya
mov a5,raya
mov a6,raya
mov a7,raya
mov a8,raya
mov a9,raya
mov a10,raya
mov a11,raya
mov a12,raya
mov a13,raya
mov a14,raya
mov a15,raya 
mov a16,raya  
mov a17,raya
mov a18,raya
mov a19,raya 
mov a20,raya

mov b1,raya
mov b2,raya
mov b3,raya
mov b4,raya
mov b5,raya
mov b6,raya
mov b7,raya
mov b8,raya
mov b9,raya
mov b10,raya
mov b11,raya 
mov b12,raya
mov b13,raya
mov b14,raya
mov b15,raya
mov b16,raya
mov b17,raya
mov b18,raya
mov b19,raya
mov b20,raya

mov movj1,0
mov movj2,0

call home
call IMPRIME
;call limpia
;******************** Tiempo de Espera  
     mov cx,01000h
    delay17:
     loop delay17
;********************

  
  cmp fisher,1
  je dato_seteo_2:   ;salto al conteo Fisher
  
  cmp fisher,3
  je dato_seteo_3     ;salto al conteo Gong

 
dato_seteo_1:    ;Se setean los valores correspondientes para este modo

 
mov a1,ht
mov a2,30h
mov a3,30h
mov a4,espacio
mov a5,W 
mov bh,win1
mov a6,bh
mov a7,espacio
mov a8,S
mov a9,U
mov a10,B
mov a11,I
mov a12,T
mov a13,A
mov a14,espacio
mov a15,W
mov bh,win2 
mov a16,bh  
mov a17,espacio
mov a18,ht
mov a19,30h 
mov a20,30h


mov cl,hora
mov hj1,cl
mov hj2,cl
call dato
 
mov b1,cl
mov b14,cl

mov cl,min
mov mj1,cl
mov mj2,cl
call dato
 
 
mov b4,cl
mov b3,ch

mov b17,cl
mov b16,ch 

mov cl,seg
mov segj1,cl
mov segj2,cl
call dato

mov b7,cl
mov b6,ch 

mov b20,cl
mov b19,ch


mov b2,puntos
mov b5,puntos
mov b8,espacio
mov b9,mas
mov b10,mas
mov b11,30h 
mov b12,30h
mov b13,espacio
mov b15,puntos
mov b18,puntos

call clean
call IMPRIME
;call IMPRIMEB
jmp espera1


dato_seteo_2: 

mov a1,ht
mov a2,30h
mov a3,30h
mov a4,espacio
mov a5,W 
mov bh,win1
mov a6,bh
mov a7,espacio
mov a8,F
mov a9,I
mov a10,S
mov a11,H
mov a12,E
mov a13,R
mov a14,espacio
mov a15,W
mov bh,win2 
mov a16,bh  
mov a17,espacio
mov a18,ht
mov a19,30h 
mov a20,30h


mov cl,hora
mov hj1,cl
mov hj2,cl
call dato
 
mov b1,cl
mov b14,cl

mov cl,min
mov mj1,cl
mov mj2,cl
call dato
 
 
mov b4,cl
mov b3,ch

mov b17,cl
mov b16,ch 

mov cl,seg
mov segj1,cl
mov segj2,cl
call dato

mov b7,cl
mov b6,ch 

mov b20,cl
mov b19,ch


mov b2,puntos
mov b5,puntos
mov b8,espacio
mov b9,mas
mov b10,mas

mov cl,incr 
call dato
mov b11,ch
mov b12,cl

mov b13,espacio
mov b15,puntos
mov b18,puntos

call clean
call IMPRIME
;call IMPRIMEB
jmp espera1




;**********INICIO**********************CONTEO M.SUBITA-Fisher**********************************

espera1: ;Periodo de espera para el inicio de la partida
   
    mov dx,pc
    in ax,dx 
;************************   
    cmp al,010010b        ;Valor para INICIAR -J2
    je j1_fs
    
    cmp al,110010b        ;Valor para INICIAR -J2
    je j1_fs   
                               
    cmp ax,0C2h     ;Cancelar
    je cancel 
    
    cmp ax,082h     ;final de partida
    je fin
    
   jmp espera1
;************************

espera2: ;Periodo de espera para el inicio de la partida
   
    mov dx,pc
    in ax,dx 
;************************   
    cmp al,100010b        ;Valor para INICIAR -J1
    je j2_fs
    
   
    cmp al,110010b        ;PAUSA
    je j2_fs   
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
    
    cmp ax,082h     ;final de partida
    je fin
    
   jmp espera2
;************************
    
    
cambio1:  ;Etiqueta para el manejo del cambio de turno de jugador 1 a 2  

    call cuenta1
   
    inc movj1 ;Incremento de los movimientos

    cmp fisher,1 ;Para determinar el modo de juego
    jne j1_fs 
 

    mov cx,0
    mov cl,incr 
    
    
inc_seg1: 
  
    add segj2,1 
    cmp segj2,60        ;Este bucle incrementa el tiempo en el modo Fisher
    jge f4 
    
  
f5:
      
      
loop inc_seg1 

jmp j1_fs  
  
f4:
     
    mov segj2,0      
    add mj2,1           ;En caso de que los segundos sean mayor a 59
    cmp mj2,60 
    jge f6 
    
    jmp f5
    
f6:   
       mov mj2,0       ;En caso de que los minutos sean mayor a 59
       inc hj2  
  
   jmp f5
 
j1_fs: ;Decremento para el jugador 2  

    inc timej1
;*******************Retraso de +- medio segundo    
    mov cx,084Dh
    
    seg_j1_fs1:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,100010b        ;Valor para INICIAR -J1
    je cambio2 
    
    cmp al,110010b        ;PAUSA
    je espera1
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************ 
   loop seg_j1_fs1
   
;************************   
      
    dec segj1
    cmp segj1,0
    jl decminj1

call update       ;actualizacion de variables
;*******************Retraso de +- medio segundo    
    mov cx,084Dh
    
    seg_j1_fs2:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,100010b        ;Valor para INICIAR -J1
    je cambio2 
    
    cmp al,110010b        ;PAUSA
    je espera1
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************ 
   loop seg_j1_fs2
   
;************************ 


call home
call IMPRIME

jmp j1_fs
 
decminj1: 
    
    dec mj1
    mov segj1,59 
    
    cmp mj1,0
    jl horaminj1

call update  
;************************Lectura para verificar un cambio de turno  
    mov ax,0
    mov dx,pc
    in ax,dx 
    cmp al,100010b    ;Valor para INICIAR -J1
    je cambio2 
    
    cmp al,110010b        ;PAUSA
    je espera1
    
    cmp ax,082h     ;final de partida
    je fin   
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************
call IMPRIMEB 
 
jmp j1_fs
     
horaminj1:
      
    cmp hj1,0
    jl finj1
 
    dec hj1
    jl finj1
    
    mov mj1,59
    mov segj1,59      
 
 call update
;************************Lectura para verificar un cambio de turno    
    mov ax,0
    mov dx,pc
    in ax,dx 
    cmp al,100010b    ;Valor para INICIAR -J1
    je cambio2  
    
    cmp al,110010b        ;PAUSA
    je espera1
    
    cmp ax,082h     ;final de partida
    je fin     
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************


call IMPRIMEB 
 
jmp j1_fs   


;-------------------------------------Inicio del Siguiente Decremento
cambio2: 
    call cuenta2
    
    inc movj2 
    cmp fisher,1
    jne j2_fs 
 

    mov cx,0
    mov cl,incr 

inc_seg2: 

      
 add segj1,1 
 cmp segj1,60d          ;Bucle para el incremento del tiempo
 jge f1
  
f2:
      
      
loop inc_seg2 

jmp j2_fs  
  
f1:
      
    mov segj1,0     
    inc mj1           ;En caso de que los segundos sean mayor a 59
    cmp mj1,60 
    jge f3 
    
jmp f2
    
f3:   
       mov mj1,0      ;En caso de que los minutos sean mayor a 59
       inc hj1  
  
jmp f2


j2_fs:; Decremento para el jugador 2
 
     inc timej2
 
;*******************Retraso de +- medio segundo    
    mov cx,084Dh
    
seg_j2_fs1:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,010010b        ;Valor para INICIAR -J1
    je cambio1 
    
    cmp al,110010b        ;PAUSA
    je espera2
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************ 
loop seg_j2_fs1
   
;************************

    dec segj2
    cmp segj2,0
    jl decminj2

call update   ;actualizacion de variables
 ;*******************Retraso de +- medio segundo    
    mov cx,084Dh
    
    seg_j2_fs2:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,010010b        ;Valor para INICIAR -J1
    je cambio1 
    
    cmp al,110010b        ;PAUSA
    je espera2
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je cancel
;************************ 
   loop seg_j2_fs2
   
;************************

call home
call IMPRIME

jmp j2_fs 
 
decminj2: 
  
    dec mj2 
    cmp mj2,0
    jl horaminj2
    mov segj2,59 
   
call update   ;Actualziacion de variables
;************************ Lectura para verificar un cambio de turno
    mov ax,0 
    mov dx,pc
    in ax,dx   
    cmp al,010010b        ;Valor para INICIAR -J2
    je cambio1
    
    cmp al,110010b        ;PAUSA
    je espera2
    
     cmp ax,082h     ;final de partida
    je fin       
            
   cmp ax,0C2h     ;Cancelar
    je cancel

;************************ 

 
call IMPRIMEB 
 
jmp j2_fs
     
horaminj2:
      
    cmp hj2,0
    jl finj2 
    
    dec hj2 
    cmp hj2,0
    jl finj2 
    
    mov segj2,59
    mov mj2,59 
    
call update    ;Actualiazcion de Variables
;************************Lectura para verificar un cambio de turno 
    mov ax,0 
    mov dx,pc
    in ax,dx   
    cmp al,010010b     ;Valor para INICIAR -J2
    je cambio1   
    
    
    cmp al,110010b        ;PAUSA
    je espera2
    
    cmp ax,082h     ;final de partida
    je fin    
              
    cmp ax,0C2h     ;Cancelar
    je cancel

;************************ 


call IMPRIMEB 
 
jmp j2_fs   
;**********FIN**********************CONTEO M.SUBITA**********************************


;**********INICIO*******************CONTEO GONG************************************** 
 


dato_seteo_3:    ;Se setean los valores correspondientes para este modo


mov cl,min
mov mj2,cl

mov cl,seg
mov segj2,cl 

mov a1,ht
mov a2,30h
mov a3,30h
mov a4,espacio
mov a5,W 

mov bh,win1
mov a6,bh

mov a7,espacio
mov a8,espacio
mov a9,G
mov a10,O
mov a11,N
mov a12,G
mov a13,espacio
mov a14,espacio
mov a15,W

mov bh,win2 
mov a16,bh 
 
mov a17,espacio
mov a18,ht
mov a19,30h 
mov a20,30h

mov b1,izq
mov b2,raya
mov b3,raya
mov b4,M
mov b5,I
mov b6,N
mov b7,puntos
;mov b8,
;mov b9,
mov b10,espacio
mov b11,espacio 
mov b12,S
mov b13,E
mov b14,G
mov b15,puntos
;mov b16,
;mov b17,
mov b18,raya
mov b19,raya
mov b20,der


mov cl,segj2
call dato
 
mov b17,cl
mov b16,ch

mov cl,mj2
call dato
 
mov b9,cl
mov b8,ch

call clean
call IMPRIME



esperagong1:  ;Tiempo de espera para iniciar/continuar partida J1

    mov dx,pc
    in ax,dx 
;************************   
    cmp al,12h        ;Valor para INICIAR -J1
    je j1_g
    
    cmp al,110010b        ;Valor para INICIAR -J1
    je j1_g   
                               
    cmp ax,0C2h     ;Cancelar
    je gong 
    
    cmp ax,082h     ;final de partida
    je fin
    
jmp esperagong1
;************************


esperagong2: ;Tiempo de espera para continuar partida  J2

    mov dx,pc
    in ax,dx 
;************************   
    cmp al,22h        ;Valor para INICIAR -J2
    je j2_g
    
    cmp al,110010b        ;Valor para INICIAR -J2
    je j2_g   
                               
    cmp ax,0C2h     ;Cancelar
    je gong 
    
    cmp ax,082h     ;final de partida
    je fin
    
jmp esperagong2
;************************

          

cambio1_g:   ;Cambio de turno

    mov cl,min
    mov mj2,cl

    mov cl,seg
    mov segj2,cl 

    inc movj2
    
    mov b20,full
    mov b1,izq
    
    call cuenta1 
    

jmp j1_g

j1_g:

    inc timej1
;*******************Retraso de +- un segundo    
    mov cx,0109Ah
    
seg_g:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,22h        ;Valor para INICIAR -J1
    je cambio2_g 
    
    cmp al,110010b        ;PAUSA
    je esperagong1
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je subita
;************************ 
loop seg_g
   
;************************
 
    mov cl,movj2 
 
call dato 
   
    mov a2,ch
    mov a3,cl

    dec segj2
    cmp segj2,0
    jl decminj1_g

    mov cl,segj2 
    
call dato 

    mov b17,cl
    mov b16,ch
 
    mov cl,mj2
call dato

    mov b8,ch
    mov b9,cl
    

call home
call IMPRIME

jmp j1_g
 
decminj1_g: 
  
    dec mj2 

    cmp mj2,0
    jl finj1

    mov cl,mj2
call dato

    mov b8,ch
    mov b9,cl


    mov segj2,59 
    mov cl,segj2 
    
call dato
    mov b17,cl
    mov b16,ch
                             
;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp al,22h        ;Valor para INICIAR -J1
    je cambio2_g 
    
    cmp al,110010b        ;PAUSA
    je esperagong1
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je subita
;************************


call IMPRIMEB 
 
jmp j1_g

;---------------------------
 
cambio2_g:

    mov cl,min
    mov mj2,cl          ;Cambio de Turno J2

    mov cl,seg
    mov segj2,cl
    inc movj1 
    
    mov b1,full
    mov b20,der
      
    call cuenta2 
    
    
jmp j2_g

j2_g:

    inc timej2
;*******************Retraso de +- un segundo    
    mov cx,0109Ah
    
    seg_g2:
    ;************************ Lectura para verificar un cambio de turno   
    mov ax,0
    mov dx,pc
    in ax,dx  
    
    cmp ax,12h        ;Valor para INICIAR -J1
    je cambio1_g 
    
    cmp al,110010b        ;PAUSA
    je esperagong2
    
    cmp ax,082h     ;final de partida
    je fin      
                           
    cmp ax,0C2h     ;Cancelar
    je gong
;************************ 
   loop seg_g2
   
;************************
 
    mov cl,movj1 
 
call dato  
    mov a19,ch
    mov a20,cl

    dec segj2
    cmp segj2,0
    jl decminj2_g

    mov cl,segj2 
    
call dato 

    mov b17,cl
    mov b16,ch 
 
    mov cl,mj2
call dato

    mov b8,ch
    mov b9,cl

call home
call IMPRIME

jmp j2_g
 
decminj2_g: 
  
    dec mj2 

    cmp mj2,0
    jl finj2

    mov cl,mj2
call dato

    mov b8,ch
    mov b9,cl

    mov segj2,59 
    mov cl,segj2 
    
call dato
    mov b17,cl
    mov b16,ch
 
;************************ Lectura para verificar un cambio de turno
    mov ax,0 
    mov dx,pc
    in ax,dx   
    cmp ax,12h        ;Valor para INICIAR -J2
    je cambio1_g
    
    cmp al,110010b        ;PAUSA
    je espera2
    
     cmp ax,082h     ;final de partida
    je fin       
            
    cmp ax,0C2h     ;Cancelar
    je gong

;************************ 
               
call IMPRIMEB 
 
jmp j2_g 



cancel:

cmp fisher,1
je fisherS

cmp fisher,2
je subita
 
 
fin:


mov a1,espacio
mov a2,espacio
mov a3,espacio
mov a4,espacio
mov a5,espacio
mov a6,Q
mov a7,U
mov a8,I
mov a9,E
mov a10,N
mov a11,espacio
mov a12,G
mov a13,A
mov a14,N
mov a15,O 
mov a16,pre     
mov a17,espacio
mov a18,espacio
mov a19,espacio 
mov a20,espacio   

mov b1,UNO
mov b2,espacio
mov b3,espacio
mov b4,espacio
mov b5,espacio
mov b6,espacio
mov b7,espacio
mov b8,J
mov b9,U
mov b10,G
mov b11,A 
mov b12,D
mov b13,O
mov b14,R
mov b15,espacio
mov b16,espacio
mov b17,espacio
mov b18,espacio
mov b19,espacio
mov b20,DOS 
 call clean
 call IMPRIME 
;------------------------------------------ 
;mov a1,raya
;mov a2,raya
;mov a3,raya
;mov a4,T
;mov a5,I
;mov a6,M
;mov a7,E
;mov a8,espacio
;mov a9,J
;mov a10,UNO
;mov a11,puntos
;mov a12,
;mov a13,
;mov a14,
;mov a15,S 
;mov a16,E     
;mov a17,G
;mov a18,raya
;mov a19,raya 
;mov a20,raya   

;mov b1,raya
;;mov b2,raya
;mov b3,raya
;mov b4,T
;mov b5,I
;mov b6,M
;mov b7,E
;mov b8,espacio
;mov b9,J
;mov b10,DOS
;mov b11,puntos 
;mov b12,
;mov b13,
;mov b14,
;mov b15,S
;mov b16,E
;mov b17,G
;mov b18,raya
;mov b19,raya
;mov b20,raya  
;************************
 win:
    mov ax,0 
    mov dx,pc
    in ax,dx   
    cmp al,010010b     ;Valor para INICIAR -J2
    je finj1   
    
    cmp al,100010b     ;Valor para INICIAR -J2
    je finj2   
    
  jmp win
;************************ 


 
 finj1: 
 ;call dato2
call clean 
 ;call IMPRIME
 ;
  finjj1:
 ;   mov dx,pc
 ;   in ax,dx   

 ;   cmp al,110010b        ;Continuar
 ;   je finj1_f
    
    
 ;   cmp al,110010b        
  ;  je finj1_f 
    
  ;  cmp al,010010b        
   ; je finj1_f  
   ;; 
   ; jmp finjj1
 
 
; finj1_f:
 
 
 inc win2
 
 cmp fisher,1
 je inicio_fisher_subita 
 
 cmp fisher,2 
 je inicio_fisher_subita
 
 cmp fisher,3
 je seteo_gong
 
 
 finj2:
; call dato2
 call clean
; call IMPRIME
 
 ; finjj2 :
 
  ;  mov dx,pc
   ; in ax,dx   

  ; cmp al,110010b        ;Continuar
   ; je finj2_f 
    
    
   ; jmp finjj2
 
 
; finj2_f:
 
 inc win1 
 
 cmp fisher,1
 je inicio_fisher_subita 
 
 cmp fisher,2 
 je inicio_fisher_subita
 
 cmp fisher,3
 je inicio_fisher_subita
  
  jmp fin
ret 

;Zona para declarar Variables 

a1  db 0h
a2  db 0h
a3  db 0h
a4  db 0h
a5  db 0h
a6  db 0h
a7  db 0h
a8  db 0h
a9  db 0h
a10 db 0h
a11 db 0h
a12 db 0h
a13 db 0h
a14 db 0h
a15 db 0h
a16 db 0h
a17 db 0h
a18 db 0h
a19 db 0h
a20 db 0h


b1  db 0h
b2  db 0h
b3  db 0h
b4  db 0h
b5  db 0h
b6  db 0h
b7  db 0h
b8  db 0h
b9  db 0h
b10 db 0h
b11 db 0h
b12 db 0h
b13 db 0h
b14 db 0h
b15 db 0h
b16 db 0h
b17 db 0h
b18 db 0h
b19 db 0h
b20 db 0h


seg db 0
min db 0
hora db 0 
incr db 0

fisher db 0 


movj1 db 30h
movj2 db 30h

win1 db 30h
win2 db 30h


segj1 db 0
segj2 db 0
mj1 db 0
mj2 db 0
hj1 db 0
hj2 db 0

timej1 dw 0
timej2 dw 0 

total1 dw 0
total2 dw 0

counter1 dw 2500d  
counter2 dw 2000d

;******************************************************


;Zona para las Llamadas
limpia proc
    
  mov cx,100
  mov bx,2500d
  
  lp:  
   mov [bx],0
   inc bx

  loop lp  
   
  mov bx,2000d
  mov cx,100 
  lp2:  
   mov [bx],0
   inc bx

  loop lp2  
   
 mov mj1,0
 mov mj2,0   
    
ret
limpia endp



cuenta1 proc 
  
mov bx,counter1
  mov dx,timej1 
  xchg dh,dl
 mov [bx],dx
   inc bx
  mov cl,[bx]
  dec bx
  mov ch,[bx]
 add total1,cx

 add counter1,2   
 mov timej1,0   
    ret
    
cuenta1 endp     
 
 
cuenta2 proc
   
mov bx,counter2
  mov dx,timej2 
  xchg dh,dl
 mov [bx],dx
   inc bx
  mov cl,[bx]
  dec bx
  mov ch,[bx]
 add total2,cx

 add counter2,2
   
  mov timej2,0   
    ret
    
cuenta2 endp  
 
 
 
pulso PROC     
 
    mov dx,pc       ;pulso
    mov al,0000_00011b
    out dx,ax 

     mov cx,100h
     delay:
     loop delay
     
    mov dx,pc       ;pulso
    mov al,0000_00010b
    out dx,ax
 
     mov cx,100h
     delay1:
     loop delay1
   
    RET      
pulso ENDP


clean proc
mov dx,pa
mov ax,clean
out dx,ax


mov dx,pc       ;pulso
mov aL,00001b
out dx,ax


mov dx,pc       ;pulso
mov aL,00000b
out dx,ax 


  ret
clean endp  

home proc
mov dx,pa
mov ax,home
out dx,ax


mov dx,pc       ;pulso
mov aL,00001b
out dx,ax


mov dx,pc       ;pulso
mov aL,00000b
out dx,ax 


  ret
home endp 



dato proc
    
    mov dx,0
    mov al,cl
    mov bx,0Ah
    
    
    div bx
    mov cl,dl
    add cl,30h
    
    mov dx,0
 
    div bx
    mov ch,dl
    add ch,30h
    ret
dato endp 



datogo proc
mov b1,espacio
mov b2,raya
mov b3,raya
mov b4,M
mov b5,I
mov b6,N
mov b7,puntos
;mov b8,
;mov b9,
mov b10,espacio
mov b11,espacio 
mov b12,S
mov b13,E
mov b14,G
mov b15,puntos
;mov b16,
;mov b17,
mov b18,raya
mov b19,raya
mov b20,espacio

    ret
datogo endp 


datofs proc
mov b1,H
mov b2,puntos
mov b3,30h
;mov b4,
mov b5,espacio
mov b6,espacio
mov b7,M
mov b8,I
mov b9,N
mov b10,puntos
;mov b11, 
;mov b12,
mov b13,espacio
mov b14,espacio
mov b15,S
mov b16,E
mov b17,G
mov b18,puntos
;mov b19,
;mov b20,


    ret
datofs endp


update proc
;----------------------
    
    mov cl,movj1
call dato 
    mov a19,ch
    mov a20,cl
;---------------------- 

    mov cl,segj1 
call dato
    mov b6,ch
    mov b7,cl
;---------------------- 

    mov cl,mj1
call dato
    mov b3,ch
    mov b4,cl
;---------------------- 
   
   mov cl,hj1
call dato
    mov b1,cl
;---------------------- 

    mov cl,movj2  
call dato 
    mov a2,ch
    mov a3,cl
;---------------------- 

    mov cl,segj2 
    
call dato 
    mov b19,ch
    mov b20,cl
;---------------------- 

    mov cl,mj2
call dato
    mov b16,ch
    mov b17,cl
;----------------------

mov cl,hj2
    
call dato
    mov b14,cl
;---------------------- 


    ret
update endp


dato2 proc
    
    
    
    mov dx,0
    mov ax,total1
    mov bx,0Ah
    
    
    div bx
    add dl,30h
    mov a14,dl
    
    mov dx,0
 
    div bx
    add dl,30h
    mov a13,dl
    
    mov dx,0
 
    div bx
    add dl,30h
    mov a12,dl 
     mov dx,0
    ;-------------------------
    
    mov dx,0
    mov ax,total2
    mov bx,0Ah
    
    
    div bx
    add dl,30h
    mov b14,dl
    
    mov dx,0
 
    div bx
    add dl,30h
    mov b13,dl
    
    mov dx,0
 
    div bx
    add dl,30h
    mov b12,dl   
    
    mov dx,0
    ret
dato2 endp
    

IMPRIME PROC

    mov dx,pc       ;pulso
    mov aL,0000_00010b
    out dx,ax  
    
;-------------------------------Posicion A1
    mov dx,pa
    mov al,a1       ;dato
    out dx,ax
       
    call pulso
;-------------------------------Posicion A2

    mov dx,pa
    mov al,a2       ;dato
    out dx,ax

    call pulso           
;-------------------------------Posicion A3
 
    mov dx,pa
    mov al,a3       ;dato
    out dx,ax

  
    call pulso
;-------------------------------Posicion A4
 
    mov dx,pa
    mov al,a4       ;dato
    out dx,ax

    call pulso         
;-------------------------------Posicion A5
 
    mov dx,pa
    mov al,a5       ;dato
    out dx,ax

    call pulso  
;-------------------------------Posicion A6
 
    mov dx,pa
    mov al,a6       ;dato
    out dx,ax

    call pulso      
;-------------------------------Posicion A7
 
    mov dx,pa
    mov al,a7       ;dato
    out dx,ax

    call pulso      
;-------------------------------Posicion A8
 
    mov dx,pa
    mov al,a8       ;dato
    out dx,ax

    call pulso              
;-------------------------------Posicion A9
 
    mov dx,pa
    mov al,a9       ;dato
    out dx,ax

  
    call pulso            
;-------------------------------Posicion A10
 
    mov dx,pa
    mov al,a10       ;dato
    out dx,ax

    call pulso    
;-------------------------------Posicion A11
 
    mov dx,pa
    mov al,a11       ;dato
    out dx,ax
  
    call pulso  
;-------------------------------Posicion A12
 
    mov dx,pa
    mov al,a12       ;dato
    out dx,ax

    call pulso   
;-------------------------------Posicion A13
 
    mov dx,pa
    mov al,a13       ;dato
    out dx,ax

    call pulso   
;-------------------------------Posicion A14
 
    mov dx,pa
    mov al,a14       ;dato
    out dx,ax

  
    call pulso         
;-------------------------------Posicion A15
 
    mov dx,pa
    mov al,a15       ;dato
    out dx,ax

    call pulso
;-------------------------------Posicion A16
 
    mov dx,pa
    mov al,a16       ;dato
    out dx,ax

    call pulso
    
;-------------------------------Posicion A17
 
    mov dx,pa
    mov al,a17       ;dato
    out dx,ax

    call pulso
;-------------------------------Posicion A18
 
    mov dx,pa
    mov al,a18       ;dato
    out dx,ax

    call pulso    
;-------------------------------Posicion A19
 
    mov dx,pa
    mov al,a19       ;dato
    out dx,ax

    call pulso    
;-------------------------------Posicion A20
 
    mov dx,pa
    mov al,a20       ;dato
    out dx,ax

    call pulso
    
    call IMPRIMEB
      

   RET      
IMPRIME ENDP
             
;--------------------------------Segunda Línea    
IMPRIMEB PROC 
    
mov dx,pa
mov ax,HOME
out dx,ax


mov dx,pc       ;pulso
mov aL,00001b
out dx,ax


mov dx,pc       ;pulso
mov aL,00000b
out dx,ax     
    
    
                                       
Lb:
mov cx,64
 delay3:
  

;LCD


mov dx,pa
mov ax,0000010100b
out dx,ax


mov dx,pc       ;pulso
mov aL,00001b
out dx,ax


mov dx,pc       ;pulso
mov aL,00000b
out dx,ax 


loop delay3 


;-------------------------------Posicion B1
 
    mov dx,pa
    mov al,b1       ;dato
    out dx,ax
  
    call pulso  
;-------------------------------Posicion B2
 
    mov dx,pa
    mov aL,b2       ;dato
    out dx,ax
 
    call pulso
;-------------------------------Posicion B3
 
    mov dx,pa
    mov al,b3       ;dato
    out dx,ax 
    
    call pulso
;-------------------------------Posicion B4
 
    mov dx,pa
    mov al,b4       ;dato
    out dx,ax
  
    call pulso    
;-------------------------------Posicion B5
 
    mov dx,pa
    mov aL,b5       ;dato
    out dx,ax
    call pulso          
;-------------------------------Posicion B6
 
    mov dx,pa
    mov al,b6       ;dato
    out dx,ax
  
    call pulso   
;-------------------------------Posicion B7
 
    mov dx,pa
    mov al,b7       ;dato
    out dx,ax
  
    call pulso
;-------------------------------Posicion B8
 
    mov dx,pa
    mov al,b8       ;dato
    out dx,ax
  
    call pulso
;-------------------------------Posicion B9
 
    mov dx,pa
    mov al,b9       ;dato
    out dx,ax
  
    call pulso   
;-------------------------------Posicion B10
 
    mov dx,pa
    mov al,b10       ;dato
    out dx,ax
 
   call pulso 

  
;-------------------------------Posicion B11
 
    mov dx,pa
    mov aL,b11       ;dato
    out dx,ax
  
    call pulso   
;-------------------------------Posicion B12
 
    mov dx,pa
    mov al,b12       ;dato
    out dx,ax
  
    call pulso
;-------------------------------Posicion B13
 
    mov dx,pa
    mov al,b13       ;dato
    out dx,ax
  
    call pulso  
;-------------------------------Posicion B14
 
    mov dx,pa
    mov aL,b14       ;dato
    out dx,ax
  
    call pulso
;-------------------------------Posicion B15
 
    mov dx,pa
    mov al,b15       ;dato
    out dx,ax

    call pulso
    
;-------------------------------Posicion B16
 
    mov dx,pa
    mov al,b16       ;dato
    out dx,ax

    call pulso   
 
;-------------------------------Posicion B7
 
    mov dx,pa
    mov al,b17       ;dato
    out dx,ax

    call pulso
;-------------------------------Posicion B18
 
    mov dx,pa
    mov al,b18       ;dato
    out dx,ax

    call pulso    
;-------------------------------Posicion B19
 
    mov dx,pa
    mov al,b19       ;dato
    out dx,ax

    call pulso    
;-------------------------------Posicion B20
 
    mov dx,pa
    mov al,b20       ;dato
    out dx,ax

    call pulso






  RET      
IMPRIMEB ENDP